from itsdangerous import TimedJSONWebSignatureSerializer#Serializer序列化（把对象变成字节（二进制数据））
from comment.utils import const
from flask import current_app
from comment.models.user import User
def generate_tokens(uid):
    """
    根据已经登陆的用户id，生成token
    :param uid:用户id
    :return:
    """
    #参数1：secret_key密钥（哈希算法是可逆的 所以添加密钥增加安全性） expires_in会话过期时间
    s=TimedJSONWebSignatureSerializer(secret_key=const.SECRET_KEY,expires_in=const.JWT_EXPIRY_SECOND)
    #生成token
    return s.dumps({'id':uid}).decode()#decode将其变为字符串



def verify_tokens(token_str):
    """
    验证token，并且验证成功之后返回用户的id（）
    :param token_str:
    :return:
    """
    s=TimedJSONWebSignatureSerializer(secret_key=const.SECRET_KEY)#校验的时候不用传有效时间了

    try:
        data=s.loads(token_str)#本质上就是一个解密过程
    except Exception as e:
        current_app.logger.info(e)#将错误打印出来
        return {'message':'token是非法的 验证失败'}

    #如果没有验证失败 解密之后会有一个用户id 还需要看看当前用户状态是否正常
    user=User.query.filter(User.id==data['id']).first()
    if user and user.status !=0:#状态0表示正常
        return {'message':'数据库中的用户状态过期'}

    return {'id':user.id}

